package com.example.myspringframework.beans.factory;

import com.example.myspringframework.beans.factory.config.BeanPostProcessor;
import com.example.myspringframework.beans.factory.config.SingletonBeanRegistry;
import com.example.myspringframework.core.convert.ConversionService;
import com.example.myspringframework.utils.StringValueResolver;

import java.util.List;

/**
 * 扩展BeanFactory
 * 提供添加BeanPostProcessor的能力
 * 提供使用和添加字符解析器的能力
 * 继承SingletonBeanRegistry接口，得到添加和获取单例bean的能力
 */
public interface ConfigurableBeanFactory extends BeanFactory, SingletonBeanRegistry {

    // 添加BeanPostProcessor
    void addBeanPostProcessor(BeanPostProcessor beanPostProcessor);

    // 获取所有的BeanPostProcessor
    List<BeanPostProcessor> getBeanPostProcessors();

    // 销毁单例Bean
    void destroySingletons();

    // 添加字符解析器
    void addEmbeddedValueResolver(StringValueResolver valueResolver);

    // 使用字符解析器解析字符串
    String resolveEmbeddedValue(String value);

    // 设置类型转换器
    void setConversionService(ConversionService conversionService);

    // 获取类型转换器
    ConversionService getConversionService();
}
